from rest_framework import serializers

from home import models


class PositionSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.PositionType
        fields = '__all__'


# 带子级的职位类型序列化器，继承自ModelSerializer，支持递归序列化子级数据
class PositionTypeSerializer(serializers.ModelSerializer):
    # 定义children字段，使用SerializerMethodField指定该字段的值由自定义方法get_children生成
    # 用于在序列化当前职位类型时，同时包含其下属的子级职位类型列表
    children = serializers.SerializerMethodField()

    # 定义children字段的取值方法，obj为当前正在序列化的PositionType实例
    def get_children(self, obj):
        # 获取当前职位类型的子级（假设模型中用children关联子级），筛选未删除（isdel=False）的子级，并按sort字段排序
        children = obj.children.filter(isdel=False).order_by('sort')
        # 如果存在子级
        if children:
            # 递归使用PositionTypeSerializer序列化子级列表（many=True表示序列化多个对象），并传入当前上下文（如request等）
            return PositionTypeSerializer(children, many=True, context=self.context).data
        # 如果没有子级，返回空列表
        return []

    # 元数据类，配置序列化器参数
    class Meta:
        model = models.PositionType  # 关联模型为PositionType
        fields = '__all__'  # 序列化所有字段（包括自定义的children字段）


class headNavigationSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.headNavigation
        fields = '__all__'
